李守中

Bochs 相关

已知 Debian11 repo 里面的 bochs 有问题,程序启动的时候会有类似下面的报错:

bx_dbg_read_linear: physical memory read error (phy=0x0000322f3530, lin=0x00000000322f3530)
Next at t=668577
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0

StackOverFlow 上也有人讨论了 这个问题,但没找到原因,给出的解决方法是自己编译一个。

查了查这个包的历史,发现 Debian 的 package builder 在把 2.6.9+dfsg-3 (main) [buster] 更新到 2.6.11+dfsg-4 (main) [bullseye] (更新记录) 时引入了 很多和 BIOS 相关的 patch,而 buster 上使用 apt 安装的 bochs 可以正常使用,所以这个问题可能由这些新引进的 patch 引起。注意到其中一个 patch 和 BIOS ROM 有关,猜测问题可能和这个 patch 有关 (未做验证)。

所以,要使用的话只能自己从源码编译,以在 Debian11 (Gnome) 上编译 bochs-2.6.11 为例。

安装依赖后,进入源码目录:

sudo apt install build-essential libgtk2.0-dev libreadline-dev
cd bochs-2.6.11

关于依赖部分:

配置编译选项:

./configure \
    --prefix=$HOME/.local/opt/bochs-2.6.11-bin \
    --enable-readline \
    --enable-debugger

这个配置对应的完整编译选项是:

./configure \
    --prefix=$HOME/.local/opt/bochs-2.6.11-bin \
    --enable-readline\
    --enable-debugger --enable-debugger-gui --enable-iodebug \
    --with-x11 \
    --enable-xpm \
    --enable-show-ips \
    --enable-logging \
    --enable-assert-checks \
    --enable-cpu-level=6 \
    --enable-fpu \
    --enable-alignment-check \
    --enable-a20-pin \
    --enable-large-ramfile \
    --enable-cdrom \
    --enable-pci

需要注意,尽管 --with-x11 是 Linux 平台下的默认选项,但如果配置时使用了 --with-sdl2 但没有使用 --with-x11 ,那么 --with-x11 并不会被自动加上,因为 debugger-gui 的依赖已经被 --with-sdl2 满足了。

即,在配置编译选项时,如果没有显式地使用官方文档 编译选项 一节的 Configure Options to Select the Display Library 表中的选项,那么默认使用 --with-x ;一旦显式地使用了任意一个选项,要想启用 --with-x 就必须再次显式地写出来。

此时,使用 display_library: x, options="gui_debug" 启动 bochs 会报 display library 'x' not available ,因为在编译时 bochs 没有支持 x。在安装 libsdl2-dev 这个 sdl2 的依赖包以后,可以正常使用 display_library: sdl2, options="gui_debug" 启动 bochs。

要同时启用 sdl2 和 x 的支持需要把两个选项同时写上,即 --with-x --with-sdl2

编译并安装:

make -j2 && make install

得到的 $HOME/.local/opt/bochs-2.6.11-bin/bin/bochs 即是最终可以运行的 bochs 程序。



Last Update: 2023-08-13 Sun 14:24

Generated by: Emacs 28.2 (Org mode 9.5.5)   Contact: [email protected]

若正文中无特殊说明,本站内容遵循: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议